package com.leecode.base;

import java.util.Stack;

/**
 * @Author: yaoshubin
 * @Date: 2022-12-18 10:47
 * @description :  栈 常见面试题
 * <p>
 * 1)如何用栈结构实现队列结构，可以使用现有数据结构
 * <p>
 * 例如：       1，2，3，4，5
 * 要获得： 1，2，3，4，5
 * 但是不能使用队列
 * <p>
 * 实现思路： 用两个栈 （popStack 和 pushStack）
 * 1）保证倒数据的完整性popStack 中必须完全 倒入 pushStack
 */
public class Index_12_栈和队列思考 {

    public static void main(String[] args) throws Exception {
        int[] arr = {1, 2, 3, 4, 5};
        Stack<Integer> popStack = getPopStack(arr);
        Stack<Integer> toPushStack = popToPushStack(popStack, new Stack<Integer>());
        while (!toPushStack.isEmpty()) {
            System.out.println(toPushStack.pop() + " ");
        }
    }


    public static Stack<Integer> getPopStack(int[] arr) {
        Stack<Integer> popStack = new Stack();
        for (int i = 0; i < arr.length; i++) {
            popStack.push(arr[i]);
        }
        return popStack;
    }


    /**
     * @param popStack
     * @param pushStack
     * @return
     * @throws Exception
     */
    private static Stack<Integer> popToPushStack(Stack<Integer> popStack, Stack<Integer> pushStack) throws Exception {
        if (popStack.isEmpty()) {
            throw new Exception("popStack  is empty!");
        }
        do {
            pushStack.push(popStack.pop());
        } while (!popStack.isEmpty());

        return pushStack;
    }

}
